
package projecto.pkgfinal;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class RepositorioEspecialidades {
    
    private  String path = "Especialidades.dat";
    private  File f = new File(path);
    private  ArrayList<Especialidade> listaEspecialidades = new ArrayList<Especialidade>();
    
    public  ArrayList<Especialidade> getListaEspecialidades() {
        return listaEspecialidades;
    }
 
 public  void carregarEspecialidades() {
        try {
                //se o ficheiro existe..
                if (f.exists()) {
                        FileInputStream streamIn = new FileInputStream(f);
                        ObjectInputStream in = new ObjectInputStream(streamIn);
                        listaEspecialidades = (ArrayList<Especialidade>) in.readObject();
                }
        } catch (FileNotFoundException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        } catch (ClassNotFoundException e) {
                e.printStackTrace();
        }

    }
 
  public  void gravarEspecialidades() {
        if (listaEspecialidades.size() > 0) {
                try {
                        //se nao existir o ficheiro..cria-se
                        if (!f.exists())
                                f.createNewFile();

                        FileOutputStream streamOut = new FileOutputStream(path);
                        ObjectOutputStream out = new ObjectOutputStream(streamOut);
                        //escreve o conteudo da lista no ficheiro
                        out.writeObject(listaEspecialidades);
                        out.flush();
                        out.close();
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }
        
        

    }

  public void criarEspecialidade(String nome, String descricao){
     int codigo = proximoId();
    Especialidade especialidade = new Especialidade(nome, codigo, descricao);
    listaEspecialidades.add(especialidade);  
  }
  

  public int proximoId(){
        if(listaEspecialidades.isEmpty())
            return 1;
        int ultimo = listaEspecialidades.get(listaEspecialidades.size()-1).getCodigo();
        ultimo++;
        return ultimo;
        
    }

    public boolean existeEspecialidade (int idEspecialidade){
    int posicao= this.getEspecialidadeIndex(idEspecialidade);
    if(listaEspecialidades.get(posicao).getCodigo() == idEspecialidade)
        return true;  
    else
        return false;
        
    }

    public boolean existemEspecialidades (){
        if (getListaEspecialidades().size() > 0) {
            return true;
        }
        return false;
        
    }
    
    public Especialidade getEspecialidade(int especialidadeId){
         int posicao = this.getEspecialidadeIndex(especialidadeId);
         return this.getListaEspecialidades().get(posicao); 
     }
     public int getEspecialidadeIndex(int especialidadeId){
         if (getListaEspecialidades().size() > 0) {
			for (int i = 0; i < getListaEspecialidades().size(); i++) {
				if (especialidadeId == getListaEspecialidades().get(i).getCodigo()) {
					return i;
				}
			}
			return 0;
		}
		return 0;
     }
     public String getEspecialidadeNome(int especialidadeId){
         if (getListaEspecialidades().size() > 0) {
			for (int i = 0; i < getListaEspecialidades().size(); i++) {
				if (especialidadeId == getListaEspecialidades().get(i).getCodigo()) {
					return getListaEspecialidades().get(i).getNome();
				}
			}
			return "";
		}
		return "";
     }
     public String getEspecialidadeDescricao(int especialidadeId){
         if (getListaEspecialidades().size() > 0) {
			for (int i = 0; i < getListaEspecialidades().size(); i++) {
				if (especialidadeId == getListaEspecialidades().get(i).getCodigo()) {
					return getListaEspecialidades().get(i).getDescricao();
				}
			}
			return "";
		}
		return "";
     } 
     
     public void listarEspecialidades(){
        if(this.getListaEspecialidades().size()>0){
            for(Especialidade especialidade: this.getListaEspecialidades()){
                    System.out.print(especialidade.toString());
                }
        }else{
            System.out.print("Não existem especialidades em sistema\n");
        }
     }
     
     public int getCodigoEspecialidade(int idEspecialidade){
         int posicao=this.getEspecialidadeIndex(idEspecialidade);
         int codigo = this.getListaEspecialidades().get(posicao).getCodigo();
         return codigo;
     }
     
     public String listarEspecialidade(int codigoEspecialidade){
         int posicao=this.getEspecialidadeIndex(codigoEspecialidade);
         return this.getListaEspecialidades().get(posicao).toString();
     } 
     public void actualizarEspecialidade(int codigoEspecialidade,String nome,String descricao){
         int posicao=this.getEspecialidadeIndex(codigoEspecialidade);
         this.getListaEspecialidades().get(posicao).setNome(nome);
         this.getListaEspecialidades().get(posicao).setDescricao(descricao);
         
     }
    
    public void apagarEspecialidade(int especialidadeId){
     int posicao = this.getEspecialidadeIndex(especialidadeId);
     if(posicao>=0){
     //TODO: Data anteriores ao dia de hoje, consideram-se válidas?
        //XXX: Está a validar as consultar e os médicos
     if(!Consultorio.dbConsultas.existeConsulta(Integer.valueOf(Especialidade.IDCAMPO[0]), especialidadeId) && !Consultorio.dbPessoas.temEspecialidade(especialidadeId)){
         listaEspecialidades.remove(posicao);
        System.out.println("\nREGISTO DA ESPECIALIDADE APAGADO!\n");
     }else
         System.out.println("\nExistem consultas com esta especialidade, não pode apagar o registo.\n");
   
     }else{
        System.out.println("\nREGISTO NÃO ENCONTRADO!\n");
     }
    }

}